<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0, user-scalable=yes"
    />
    <title>Json解析说明</title>
    <link
      rel="icon"
      href="./static/xuelanglog.png?_t=1645502033417"
    />

    <style type="text/css">
      body {
        font-family: Helvetica, arial, sans-serif;
        font-size: 14px;
        line-height: 1.6;
        padding-top: 10px;
        padding-bottom: 10px;
        background-color: white;
        padding: 30px;
      }

      body > *:first-child {
        margin-top: 0 !important;
      }
      body > *:last-child {
        margin-bottom: 0 !important;
      }

      a {
        color: #4183c4;
      }
      a.absent {
        color: #cc0000;
      }
      a.anchor {
        display: block;
        padding-left: 30px;
        margin-left: -30px;
        cursor: pointer;
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
      }

      h1,
      h2,
      h3,
      h4,
      h5,
      h6 {
        margin: 20px 0 10px;
        padding: 0;
        font-weight: bold;
        -webkit-font-smoothing: antialiased;
        cursor: text;
        position: relative;
      }

      h1:hover a.anchor,
      h2:hover a.anchor,
      h3:hover a.anchor,
      h4:hover a.anchor,
      h5:hover a.anchor,
      h6:hover a.anchor {
        background: url()
          no-repeat 10px center;
        text-decoration: none;
      }

      h1 tt,
      h1 code {
        font-size: inherit;
      }

      h2 tt,
      h2 code {
        font-size: inherit;
      }

      h3 tt,
      h3 code {
        font-size: inherit;
      }

      h4 tt,
      h4 code {
        font-size: inherit;
      }

      h5 tt,
      h5 code {
        font-size: inherit;
      }

      h6 tt,
      h6 code {
        font-size: inherit;
      }

      h1 {
        font-size: 28px;
        color: black;
      }

      h2 {
        font-size: 24px;
        border-bottom: 1px solid #cccccc;
        color: black;
      }

      h3 {
        font-size: 18px;
      }

      h4 {
        font-size: 16px;
      }

      h5 {
        font-size: 14px;
      }

      h6 {
        color: #777777;
        font-size: 14px;
      }

      p,
      blockquote,
      ul,
      ol,
      dl,
      li,
      table,
      pre {
        margin: 15px 0;
      }

      hr {
        background: transparent
          url()
          repeat-x 0 0;
        border: 0 none;
        color: #cccccc;
        height: 4px;
        padding: 0;
      }

      body > h2:first-child {
        margin-top: 0;
        padding-top: 0;
      }
      body > h1:first-child {
        margin-top: 0;
        padding-top: 0;
      }
      body > h1:first-child + h2 {
        margin-top: 0;
        padding-top: 0;
      }
      body > h3:first-child,
      body > h4:first-child,
      body > h5:first-child,
      body > h6:first-child {
        margin-top: 0;
        padding-top: 0;
      }

      a:first-child h1,
      a:first-child h2,
      a:first-child h3,
      a:first-child h4,
      a:first-child h5,
      a:first-child h6 {
        margin-top: 0;
        padding-top: 0;
      }

      h1 p,
      h2 p,
      h3 p,
      h4 p,
      h5 p,
      h6 p {
        margin-top: 0;
      }

      li p.first {
        display: inline-block;
      }
      li {
        margin: 0;
      }
      ul,
      ol {
        padding-left: 30px;
      }

      ul :first-child,
      ol :first-child {
        margin-top: 0;
      }

      dl {
        padding: 0;
      }
      dl dt {
        font-size: 14px;
        font-weight: bold;
        font-style: italic;
        padding: 0;
        margin: 15px 0 5px;
      }
      dl dt:first-child {
        padding: 0;
      }
      dl dt > :first-child {
        margin-top: 0;
      }
      dl dt > :last-child {
        margin-bottom: 0;
      }
      dl dd {
        margin: 0 0 15px;
        padding: 0 15px;
      }
      dl dd > :first-child {
        margin-top: 0;
      }
      dl dd > :last-child {
        margin-bottom: 0;
      }

      blockquote {
        border-left: 4px solid #dddddd;
        padding: 0 15px;
        color: #777777;
      }
      blockquote > :first-child {
        margin-top: 0;
      }
      blockquote > :last-child {
        margin-bottom: 0;
      }

      table {
        padding: 0;
        border-collapse: collapse;
      }
      table tr {
        border-top: 1px solid #cccccc;
        background-color: white;
        margin: 0;
        padding: 0;
      }
      table tr:nth-child(2n) {
        background-color: #f8f8f8;
      }
      table tr th {
        font-weight: bold;
        border: 1px solid #cccccc;
        margin: 0;
        padding: 6px 13px;
      }
      table tr td {
        border: 1px solid #cccccc;
        margin: 0;
        padding: 6px 13px;
      }
      table tr th :first-child,
      table tr td :first-child {
        margin-top: 0;
      }
      table tr th :last-child,
      table tr td :last-child {
        margin-bottom: 0;
      }

      img {
        max-width: 100%;
      }

      span.frame {
        display: block;
        overflow: hidden;
      }
      span.frame > span {
        border: 1px solid #dddddd;
        display: block;
        float: left;
        overflow: hidden;
        margin: 13px 0 0;
        padding: 7px;
        width: auto;
      }
      span.frame span img {
        display: block;
        float: left;
      }
      span.frame span span {
        clear: both;
        color: #333333;
        display: block;
        padding: 5px 0 0;
      }
      span.align-center {
        display: block;
        overflow: hidden;
        clear: both;
      }
      span.align-center > span {
        display: block;
        overflow: hidden;
        margin: 13px auto 0;
        text-align: center;
      }
      span.align-center span img {
        margin: 0 auto;
        text-align: center;
      }
      span.align-right {
        display: block;
        overflow: hidden;
        clear: both;
      }
      span.align-right > span {
        display: block;
        overflow: hidden;
        margin: 13px 0 0;
        text-align: right;
      }
      span.align-right span img {
        margin: 0;
        text-align: right;
      }
      span.float-left {
        display: block;
        margin-right: 13px;
        overflow: hidden;
        float: left;
      }
      span.float-left span {
        margin: 13px 0 0;
      }
      span.float-right {
        display: block;
        margin-left: 13px;
        overflow: hidden;
        float: right;
      }
      span.float-right > span {
        display: block;
        overflow: hidden;
        margin: 13px auto 0;
        text-align: right;
      }

      code,
      tt {
        margin: 0 2px;
        padding: 0 5px;
        white-space: nowrap;
        border: 1px solid #eaeaea;
        background-color: #f8f8f8;
        border-radius: 3px;
      }

      pre code {
        margin: 0;
        padding: 0;
        white-space: pre;
        border: none;
        background: transparent;
      }

      .highlight pre {
        background-color: #f8f8f8;
        border: 1px solid #cccccc;
        font-size: 13px;
        line-height: 19px;
        overflow: auto;
        padding: 6px 10px;
        border-radius: 3px;
      }

      pre {
        background-color: #f8f8f8;
        border: 1px solid #cccccc;
        font-size: 13px;
        line-height: 19px;
        overflow: auto;
        padding: 6px 10px;
        border-radius: 3px;
      }
      pre code,
      pre tt {
        background-color: transparent;
        border: none;
      }

      sup {
        font-size: 0.83em;
        vertical-align: super;
        line-height: 0;
      }

      kbd {
        display: inline-block;
        padding: 3px 5px;
        font-size: 11px;
        line-height: 10px;
        color: #555;
        vertical-align: middle;
        background-color: #fcfcfc;
        border: solid 1px #ccc;
        border-bottom-color: #bbb;
        border-radius: 3px;
        box-shadow: inset 0 -1px 0 #bbb;
      }

      * {
        -webkit-print-color-adjust: exact;
      }
      @media screen and (min-width: 914px) {
        body {
          width: 854px;
          margin: 0 auto;
        }
      }
      @media print {
        table,
        pre {
          page-break-inside: avoid;
        }
        pre {
          word-wrap: break-word;
        }
        body {
          padding: 2cm;
        }
      }
    </style>
  </head>

  <body>
    <h3 id="toc_0">Json解析说明</h3>

    <blockquote>
      <p><strong>举例：</strong></p>

      <div>
        <pre><code class="language-javascript">{
    &quot;store&quot;: {
        &quot;book&quot;: [
            {
                &quot;category&quot;: &quot;reference&quot;,
                &quot;author&quot;: &quot;Nigel Rees&quot;,
                &quot;title&quot;: &quot;Sayings of the Century&quot;,
                &quot;price&quot;: 8.95
            },
            {
                &quot;category&quot;: &quot;fiction&quot;,
                &quot;author&quot;: &quot;J. R. R. Tolkien&quot;,
                &quot;title&quot;: &quot;The Lord of the Rings&quot;,
                &quot;isbn&quot;: &quot;0-395-19395-8&quot;,
                &quot;price&quot;: 22.99
            }
        ],
        &quot;bicycle&quot;: {
            &quot;color&quot;: &quot;red&quot;,
            &quot;price&quot;: 19.95
        }
    },
    &quot;expensive&quot;: 10
}</code></pre>
      </div>

      <p><strong>解析数据说明</strong></p>

      <table>
        <thead>
          <tr>
            <th>操作</th>
            <th>说明</th>
          </tr>
        </thead>

        <tbody>
          <tr>
            <td>$.store.book[*].author</td>
            <td>获取json中store下book下的所有author值</td>
          </tr>
          <tr>
            <td>$..author</td>
            <td>获取所有json中所有author的值</td>
          </tr>
          <tr>
            <td>$.store.*</td>
            <td>所有的东西，书籍和自行车</td>
          </tr>
          <tr>
            <td>$.store..price</td>
            <td>获取json中store下所有price的值</td>
          </tr>
          <tr>
            <td>$..book[2]</td>
            <td>获取json中book数组的第3个值</td>
          </tr>
          <tr>
            <td>$..book[-2]</td>
            <td>倒数的第二本书</td>
          </tr>
          <tr>
            <td>$..book[0,1]</td>
            <td>前两本书</td>
          </tr>
          <tr>
            <td>$..book[:2]</td>
            <td>从索引0（包括）到索引2（排除）的所有图书</td>
          </tr>
          <tr>
            <td>$..book[1:2]</td>
            <td>从索引1（包括）到索引2（排除）的所有图书</td>
          </tr>
          <tr>
            <td>$..book[-2:]</td>
            <td>获取json中book数组的最后两个值</td>
          </tr>
          <tr>
            <td>$..book[2:]</td>
            <td>获取json中book数组的第3个到最后一个的区间值</td>
          </tr>
          <tr>
            <td>$..book[?(@.isbn)]</td>
            <td>获取json中book数组中包含isbn的所有值</td>
          </tr>
          <tr>
            <td>$.store.book[?(@.price &lt; 10)]</td>
            <td>获取json中book数组中price&lt;10的所有值</td>
          </tr>
          <tr>
            <td>$..book[?(@.price &lt;= $[&#39;expensive&#39;])]</td>
            <td>获取json中book数组中price&lt;=expensive的所有值</td>
          </tr>
          <tr>
            <td>$..book[?(@.author =~ /.*REES/i)]</td>
            <td>
              获取json中book数组中的作者以REES结尾的所有值（REES不区分大小写）
            </td>
          </tr>
          <tr>
            <td>$..*</td>
            <td>逐层列出json中的所有值，层级由外到内</td>
          </tr>
          <tr>
            <td>$..book.length()</td>
            <td>获取json中book数组的长度</td>
          </tr>
        </tbody>
      </table>
    </blockquote>

    <ul>
      <li>Jsonpath操作符</li>
    </ul>

    <table>
      <thead>
        <tr>
          <th>操作</th>
          <th>说明</th>
        </tr>
      </thead>

      <tbody>
        <tr>
          <td>$</td>
          <td>查询根元素。这将启动所有路径表达式</td>
        </tr>
        <tr>
          <td>@</td>
          <td>当前节点由过滤谓词处理</td>
        </tr>
        <tr>
          <td>*</td>
          <td>通配符，必要时可用任何地方的名称或数字</td>
        </tr>
        <tr>
          <td>..</td>
          <td>深层扫描, 必要时在任何地方可以使用名称</td>
        </tr>
        <tr>
          <td>.&lt;name&gt;</td>
          <td>点，表示子节点</td>
        </tr>
        <tr>
          <td>[&#39;&lt;name&gt;&#39; (, &#39;&lt;name&gt;&#39;)]</td>
          <td>括号表示子项</td>
        </tr>
        <tr>
          <td>[&lt;number&gt; (, &lt;number&gt;)]</td>
          <td>数组索引或索引</td>
        </tr>
        <tr>
          <td>[start:end]</td>
          <td>数组切片操作</td>
        </tr>
        <tr>
          <td>[?(&lt;expression&gt;)]</td>
          <td>过滤表达式, 表达式必须求值为一个布尔值</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>
